// 字符串操作 - 示例
package main

import (
	"fmt"
	"strings"
)

func main() {
	// 字符串 s 中是否包含 substr，返回 bool 值
	fmt.Println(strings.Contains("seafood", "foo"))  // true
	fmt.Println(strings.Contains("seafood", "bar"))  // false
	fmt.Println(strings.Contains("seafood", ""))	    // true
	fmt.Println(strings.Contains("", ""))			// true

	// 字符串链接，把 slice a 通过 sep 链接起来
	s := []string{"foo", "bar", "baz"}
	fmt.Println(strings.Join(s, ", "))
	//Output:foo, bar, baz

	// 在字符串 s 中查找 sep 所在的位置，返回位置值，找不到返回 -1
	fmt.Println(strings.Index("chicken", "ken")) // 4
	fmt.Println(strings.Index("chicken", "dmr")) // -1

	// 重复 s 字符串 count 次，最后返回重复的字符串
	fmt.Println("ba" + strings.Repeat("na", 2)) // banana

	// 在 s 字符串中，把 old 字符串替换为 new 字符串，n 表示替换的次数，小于 0 表示全部替换
	fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) // oinky oinky oink
	fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1)) // moo moo moo

	// 把 s 字符串按照 sep 分割，返回 slice
	fmt.Printf("%q\n", strings.Split("a,b,c", ","))
	// Output: ["a" "b" "c"]
	fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a "))
	// Output: ["" "man " "plan " "canal panama"]
	fmt.Printf("%q\n", strings.Split(" xyz ", ""))
	// Output: [" " "x" "y" "z" " "]
	fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins"))
	// Output: [""]

	// 在 s 字符串的头部和尾部去除 cutset 指定的字符串
	fmt.Printf("[%q]\n", strings.Trim("!!! Achtung !!! ", "! "))
	// ["Achtung"]

	// 去除 s 字符串的空格符，并且按照空格分割返回 slice
	fmt.Printf("Fields are: %q", strings.Fields(" foo bar baz "))
	// output: Fields are: ["foo" "bar" "baz"]
}